﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using DTO;
using AutoMapper;
using System.Transactions;

namespace DAO
{
    public class BoPhanDAO
    {
        public static List<BoPhanDTO> DocDanhSach()
        {
            //tạo list
            List<BoPhanDTO> list = new List<BoPhanDTO>();

            //khởi tạo datacontext
            QuanLyThuVienDataContext context = new QuanLyThuVienDataContext();
            var ds = from n in context.BoPhans
                     select n;

            //duyệt danh sách
            foreach (BoPhan n in ds)
            {
                //mapping từ linQ vào dto
                BoPhanDTO dto = new BoPhanDTO();
                Mapper.CreateMap<BoPhan, BoPhanDTO>();
                dto = Mapper.Map<BoPhan, BoPhanDTO>(n);
                //thêm vào list
                list.Add(dto);
            }

            //trả về kq
            return list;
        }

        public static bool Them(BoPhanDTO dto)
        {
            using (TransactionScope scope = new TransactionScope())
            {
                //khởi tạo datacontext
                QuanLyThuVienDataContext context = new QuanLyThuVienDataContext();

                //tạo đối tượng
                BoPhan BoPhan = new BoPhan();

                //mapping
                Mapper.CreateMap<BoPhanDTO, BoPhan>();
                BoPhan = Mapper.Map<BoPhanDTO, BoPhan>(dto);

                //thêm vào ds khi nhấn submit
                context.BoPhans.InsertOnSubmit(BoPhan);

                //thực hiện thay đổi
                context.SubmitChanges();

                //Đọc dòng vừa ghi để lưu lại mã lên trên
                dto.MaBoPhan = BoPhan.MaBoPhan;

                //transaction thành công
                scope.Complete();
            }
            return true;
        }

        public static bool Xoa(BoPhanDTO dto)
        {
            using (TransactionScope scope = new TransactionScope())
            {
                //khởi tạo datacontext
                QuanLyThuVienDataContext context = new QuanLyThuVienDataContext();

                //Lấy dữ liệu phù hợp với dto
                BoPhan BoPhan = context.BoPhans.Single(c => c.MaBoPhan == dto.MaBoPhan);

                //Xóa
                context.BoPhans.DeleteOnSubmit(BoPhan);

                //thực hiện thay đổi
                context.SubmitChanges();

                //transaction thành công
                scope.Complete();
            }
            return true;
        }

        public static bool CapNhat(BoPhanDTO dto)
        {
            using (TransactionScope scope = new TransactionScope())
            {
                //khởi tạo datacontext
                QuanLyThuVienDataContext context = new QuanLyThuVienDataContext();

                //Lấy dữ liệu phù hợp với dto
                BoPhan BoPhan = context.BoPhans.Single(c => c.MaBoPhan == dto.MaBoPhan);
                BoPhan.TenBoPhan = dto.TenBoPhan;

                //thực hiện thay đổi
                context.SubmitChanges();

                //transaction thành công
                scope.Complete();
            }
            return true;
        }
    }
}
